package com.ddsso.auth.web.vo;

import org.omg.CORBA.portable.ApplicationException;

/**
 * @author zdd
 * @package com.ddsso.auth.web.vo
 * @Time Created by zdd on 2016/11/2.
 * @description 错误枚举的接口类
 */
public interface IErrors<T> {

    /**
     * 采用枚举中定义的message作为返回信息
     *
     * @return
     */
    public T parse();

    /**
     * 采用枚举中定义的message作为返回信息，并传递一些参数
     *
     * @param args
     *            具体参数列表
     * @return
     */
    public T parse(Object... args);

    /**
     * 采用枚举中定义的code，使用自定义的message作为返回信息，并可能会带上一些参数
     *
     * @param message
     *            错误信息
     * @param args
     *            具体参数列表
     * @return
     */
    public T parseMsg(String message, Object... args);

    /**
     * 采用枚举中定义的message作为异常的信息
     *
     * @return
     */
    public ApplicationException exp();

    /**
     * 采用枚举中定义的message作为异常信息，并传递一些参数
     *
     * @param args
     *            参数列表
     * @return
     */
    public ApplicationException exp(Object... args);

    /**
     * 采用枚举中定义的message作为异常信息，并传递一些参数，支持传入底层的异常
     *
     * @param cause
     *            原始异常
     * @param args
     *            参数列表
     * @return
     */
    public ApplicationException exp(Throwable cause, Object... args);

    /**
     * 采用枚举中定义的code，使用自定义的message作为异常信息，并可能会带上一些参数
     *
     * @param message
     *            错误信息
     * @param args
     *            具体参数列表
     * @return
     */
    public ApplicationException expMsg(String message, Object... args);

    /**
     * 采用枚举中定义的code，使用自定义的message作为异常信息，并可能会带上一些参数，并自持传入底层的异常
     *
     * @param message
     *            错误信息
     * @param cause
     *            原始异常
     * @param args
     *            具体参数列表
     * @return
     */
    public ApplicationException expMsg(String message, Throwable cause, Object... args);
}
